﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using MODELO;
using CONTROLADORA;

namespace VISTA
{
    public partial class frmABMPermisosGrupos : FormABMBase
    {

        dtsGrupos dtsABM;
        dtsGrupos.GrupoRow abmRow;

        dtsConsultaPermisos dtsExistentes;
        dtsConsultaPermisos dtsAsignados;

        Grupos controladora = new Grupos();
        Permisos controladoraPermisos = new Permisos();


        public frmABMPermisosGrupos()
            : base()
        {
            InitializeComponent();
        }

        public frmABMPermisosGrupos(ModoABM modo, int id)
            : base(modo, id)
        {
            InitializeComponent();
        }


        protected override void InicializarControles()
        {
        }

        protected override void CargarEntidad()
        {
            dtsABM = controladora.GetGrupoPorID(ID);
            if (dtsABM != null && dtsABM.Grupo.Count != 0)
            {
                abmRow = dtsABM.Grupo[0];
                this.txtCodigo.Text = abmRow.Codigo;
                this.txtNombre.Text = abmRow.Nombre;
            }
            this.CargarListas();
        }

        private void CargarListas()
        {
            var dts = controladoraPermisos.GetPermisos(String.Empty);

            dtsExistentes = new dtsConsultaPermisos();
            dtsAsignados = new dtsConsultaPermisos();

            foreach (dtsConsultaPermisos.ConsultaPermisosRow fila in dts.ConsultaPermisos.Rows)
            {
                if (dtsABM.Grupo_Permiso.FindByID_GrupoID_Permiso(abmRow.ID_Grupo, fila.ID_Permiso) == null)
                {
                    //no existe
                    dtsExistentes.ConsultaPermisos.ImportRow(fila);
                }
                else
                {
                    //ya está asignado
                    dtsAsignados.ConsultaPermisos.ImportRow(fila);
                }
            }

            this.lstPerExistentes.DataSource = dtsExistentes.ConsultaPermisos;
            this.lstPerExistentes.ValueMember = dtsExistentes.ConsultaPermisos.ID_PermisoColumn.ColumnName;
            this.lstPerExistentes.DisplayMember = dtsExistentes.ConsultaPermisos.NombreColumn.ColumnName;

            this.lstPermAsignados.DataSource = dtsAsignados.ConsultaPermisos;
            this.lstPermAsignados.ValueMember = dtsAsignados.ConsultaPermisos.ID_PermisoColumn.ColumnName;
            this.lstPermAsignados.DisplayMember = dtsAsignados.ConsultaPermisos.NombreColumn.ColumnName;

        }

        protected override void CrearEntidad()
        {
            this.CargarEntidad();
        }

        protected override void GuardarEntidad()
        {
            switch (this.Modo)
            {
                case ModoABM.Alta:
                case ModoABM.Modificar:
                    this.RefrezcarCambios();
                    break;
                case ModoABM.Eliminar:
                    break;
                case ModoABM.Consultar:
                    break;
                default:
                    break;
            }

            controladora.GuardarEntidad(dtsABM);
        }

        private void RefrezcarCambios()
        {
            foreach (dtsConsultaPermisos.ConsultaPermisosRow fila in this.dtsExistentes.ConsultaPermisos.Rows)
            {
                var rowDelete = this.dtsABM.Grupo_Permiso.FindByID_GrupoID_Permiso(abmRow.ID_Grupo, (int)fila[dtsExistentes.ConsultaPermisos.ID_PermisoColumn, DataRowVersion.Original]);
                if (rowDelete != null && rowDelete.RowState != DataRowState.Deleted)
                {
                    rowDelete.Delete();
                }
            }
            foreach (dtsConsultaPermisos.ConsultaPermisosRow fila in this.dtsAsignados.ConsultaPermisos.Rows)
            {
                if (fila.RowState != DataRowState.Deleted)
                {
                   var rowAdd = this.dtsABM.Grupo_Permiso.FindByID_GrupoID_Permiso(abmRow.ID_Grupo, fila.ID_Permiso);
                   if (rowAdd == null)
                   {
                       this.dtsABM.Grupo_Permiso.AddGrupo_PermisoRow(abmRow, fila.ID_Permiso);
                   }
                   else
                   {
                       rowAdd.AcceptChanges();
                       rowAdd.SetModified();
                   }
                }
            }
        }


        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.validationProvider.Validate())
            {
                base.EjecutarAccion(AccionABM.Guardar);
            }
            else
            {
                this.validationProvider.ValidationMessages(true);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        private void btnAgregarTodos_Click(object sender, EventArgs e)
        {
            foreach (dtsConsultaPermisos.ConsultaPermisosRow fila in this.dtsExistentes.ConsultaPermisos.Rows)
            {
                this.dtsAsignados.ConsultaPermisos.ImportRow(fila);
                fila.Delete();
            }
        }

        private void btnAgregarUno_Click(object sender, EventArgs e)
        {
            var rowView = this.lstPerExistentes.SelectedItem as DataRowView;
            if (rowView == null)
            {
                return;
            }
            dtsConsultaPermisos.ConsultaPermisosRow fila = rowView.Row as dtsConsultaPermisos.ConsultaPermisosRow;
            if (fila != null)
            {
                this.dtsAsignados.ConsultaPermisos.ImportRow(fila);
                fila.Delete();
            }
        }

        private void btnQuitarUno_Click(object sender, EventArgs e)
        {
            var rowView = this.lstPermAsignados.SelectedItem as DataRowView;
            if (rowView == null)
            {
                return;
            }
            dtsConsultaPermisos.ConsultaPermisosRow fila = rowView.Row as dtsConsultaPermisos.ConsultaPermisosRow;
            if (fila != null)
            {
                this.dtsExistentes.ConsultaPermisos.ImportRow(fila);
                fila.Delete();
            }
        }

        private void btnQuitarTodos_Click(object sender, EventArgs e)
        {
            foreach (dtsConsultaPermisos.ConsultaPermisosRow fila in this.dtsAsignados.ConsultaPermisos.Rows)
            {
                this.dtsExistentes.ConsultaPermisos.ImportRow(fila);
                fila.Delete();
            }
        }

    }
}